package com.itzjc.service.impl;

import com.itzjc.dao.UserMapper;
import com.itzjc.domain.entity.RequestUser;
import com.itzjc.domain.pojo.User;
import com.itzjc.service.UserService;
import com.itzjc.utils.CommonUtils;
import com.itzjc.utils.JWTUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;
import java.util.Random;

/**
 * TODO
 *
 * @className: UserServiceImpl
 * @date: 2021-06-10 09:25
 **/
@Service
public class UserServiceImpl implements UserService {
    @Autowired(required = false)
    private UserMapper userMapper;

    @Override
    public User findById(int id) {
        return userMapper.findById(id);
    }

    @Override
    public User login(String phone, String password) {
        User user = userMapper.login(phone, CommonUtils.MD5(password));
        if (null == user) {
            User user1=new User();
            user1.setToken("0");
            return user1;
        } else {
            String token = JWTUtils.geneJsonWebToken(user);
            user.setToken(token);
            user.setPassword("");
            return user;
        }


    }

    @Override
    @Transactional(transactionManager = "test1TransactionManager")
    public String register(RequestUser requestUser) {
        User user = new User();
        user.setUserName("用户"+requestUser.getPhone());
        user.setPhone(requestUser.getPhone());
        user.setPassword(CommonUtils.MD5(requestUser.getPassword()));
        user.setCreateTime(new Date());
        user.setHeadImg(getRandomImg());
        user.setStatus(4);
        if (null != user) {
            //这一步如果完成，就直接把名称返回就行了，不用再查了，用事物控制起来就行了
            userMapper.register(user);
            String username = "用户"+requestUser.getPhone();
            return username;
        } else {
            return null;
        }
    }

    @Override
    public String forget(RequestUser requestUser) {
        User user = new User();
        user.setPhone(requestUser.getPhone());
        user.setPassword(CommonUtils.MD5(requestUser.getPassword()));
        if (null != user) {
            userMapper.forget(user);
            String phone = requestUser.getPhone();
            return phone;
        } else {
            return null;
        }


    }

    @Override
    public User userInfoByToken(Integer userId) {
        return userMapper.findById(userId);
    }

    @Override
    public List<User> getBlockedUsers(Integer userId) {
        //这里加一个判断，如果这个ID的status是2就获取全部，如果不是就说明系统漏洞，不要返回任何东西
        Integer status=userMapper.findStatusById(userId);
        if (status==2) {
            //此功能是查询黑名单用户，也就是status为4的用户
            List<User> users= userMapper.getBlockedUsers();
            return users;
        }
        return null;
    }

    @Override
    public List<User> getUnBlockedUsers(Integer userId) {
        //这里加一个判断，如果这个ID的status是2就获取全部，如果不是就说明系统漏洞，不要返回任何东西
        Integer status=userMapper.findStatusById(userId);
        if (status==2) {
            //此功能是查询黑名单用户，也就是status为3的用户
            List<User> users= userMapper.getUnBlockedUsers();
            return users;
        }
        return null;
    }

    @Override
    public void recoverUser(Integer userId, Integer uIdForUser) {
        //这里加一个判断，如果这个ID的status是2就获取全部，如果不是就说明系统漏洞
        Integer status=userMapper.findStatusById(userId);
        if (status==2) {
            //此功能是移出黑名单的用户，也就是status为4的用户变成3
            userMapper.recoverUser(uIdForUser);

        }
    }

    @Override
    public void moveOutUser(Integer userId, Integer uIdForUser) {
        //这里加一个判断，如果这个ID的status是2就获取全部，如果不是就说明系统漏洞
        Integer status=userMapper.findStatusById(userId);
        if (status==2) {
            //此功能是移出黑名单的用户，也就是status为3的用户变成4
            userMapper.moveOutUser(uIdForUser);

        }

    }

    @Override
    public void deleteUser(Integer userId, Integer uIdForUser) {
        //这里加一个判断，如果这个ID的status是2就获取全部，如果不是就说明系统漏洞
        Integer status=userMapper.findStatusById(userId);
        if (status==2) {
            //此功能是移出黑名单的用户，也就是status为4的用户变成3
            userMapper.deleteUser(uIdForUser);

        }
    }

    @Override
    public List<User> searchUsersByTokenAndString(Integer userId, String word) {
        //这里加一个判断，如果这个ID的status是2就获取全部，如果不是就说明系统漏洞，不要返回任何东西
        Integer status=userMapper.findStatusById(userId);
        if (status==2) {
            //此功能是按照关键字搜索，关键字就是用户的名称
            List<User> users= userMapper.searchAllUserInfo(word);
            return users;
        }
        return null;
    }


    /**
     * 定义头像地址的静态变量
     * 资源来自网络共享的阿里云文件服务器
     *
     * @return:
     **/
    private static final String[] headImg = {
            "http://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/17.jpeg",
            "http://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/12.jpeg",
            "http://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/13.jpeg",
            "http://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/14.jpeg",
            "http://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/default/head_img/15.jpeg"
    };

    private String getRandomImg() {
        int size = headImg.length;
        Random random = new Random();
        int index = random.nextInt(size);
        return headImg[index];
    }
}
